import pandas as pd

df = pd.read_csv("filing_rate/old_data.csv")

# 去除所有缺失值
df = df.dropna()


# 时间戳数据处理
def simple_time_features(df):
    """只提取最核心的时间特征"""

    # 1. 计算关键时间间隔（天）
    if all(col in df.columns for col in ["add_time", "tj_time", "lbh_time"]):
        # 添加→提交时间间隔
        df["add_to_tj_days"] = (df["tj_time"] - df["add_time"]) / (24 * 3600)
        # 提交→立案时间间隔
        df["tj_to_lbh_days"] = (df["lbh_time"] - df["tj_time"]) / (24 * 3600)

        # 处理异常值（负值设为0）
        df["add_to_tj_days"] = df["add_to_tj_days"].apply(lambda x: max(0, x))
        df["tj_to_lbh_days"] = df["tj_to_lbh_days"].apply(lambda x: max(0, x))

    return df


# 应用简化时间特征
df = simple_time_features(df)

# 删除原始时间戳列
df = df.drop(columns=["add_time", "tj_time", "lbh_time"], errors="ignore")

# 删除 id、cid、ptstate、lbh_reason、y_time、create_time、update_time 列
df = df.drop(
    columns=[
        "id",
        "cid",
        "ptstate",
        "lbh_reason",
        "y_time",
        "create_time",
        "update_time",
    ]
)

# 将 sx_state 列中的 -1 替换为 0
df["sx_state"] = df["sx_state"].replace(-1, 0)
# 将 y_state 列中的 已签收 替换为 1
df["y_state"] = df["y_state"].replace("已签收", 1)
# 将 y_state 列中的 已取消 替换为 2
df["y_state"] = df["y_state"].replace("已取消", 2)
# 将 y_state 列中的 作废件 替换为 3
df["y_state"] = df["y_state"].replace("作废件", 3)
# 将 y_state 列中的 异常件 替换为 4
df["y_state"] = df["y_state"].replace("异常件", 4)
# 将 y_state 列中的 转寄件 替换为 5
df["y_state"] = df["y_state"].replace("转寄件", 5)
# 将 y_state 列中的 待揽收 替换为 6
df["y_state"] = df["y_state"].replace("待揽收", 6)
# 将 y_state 列中的 退回签收 替换为 7
df["y_state"] = df["y_state"].replace("退回签收", 7)

# 确保每一列都是数值类型
for col in df.columns:
    df[col] = pd.to_numeric(df[col], errors="coerce")

# 打乱数据集中行顺序
df = df.sample(frac=1, random_state=42).reset_index(drop=True)

"""===================================================================================="""


# 保存处理后的数据集
df.to_csv("filing_rate/data.csv", index=False)
new_df = pd.read_csv("filing_rate/data.csv")

print(new_df.shape)
print(new_df.head(5))

# 计算 result 列为1的数量
print("result 列为1的数量:", (new_df["result"] == 1).sum())  # 打印结果为：2749
# 计算 result 列为0的数量
print("result 列为0的数量:", (new_df["result"] == 0).sum())  # 打印结果为：28972

# y_state 列有几种取值
print(
    new_df["y_state"].unique(), len(new_df["y_state"].unique())
)  # 打印结果为：[1 0 2 3 4 5 6 7] 8
# court 列有几种取值
print(
    new_df["court"].unique(), len(new_df["court"].unique())
)  # 打印结果为：[ 761 2619 2007 ... 2902 2258 2771] 2529
